﻿using System.Collections.Generic;
using System.Windows;

namespace PostProcGUI.Model.PostProcOtherGroup.Calc
{
    /// <summary>
    /// Основной интерфейс сетки. Никакого функционала базиса здесь нет!
    /// Этот интерфейс будут реализовывать классы, которые будут хранить сами КЭ. Он будет представлять ГЕОМЕТРИЮ области.
    /// </summary>
    public interface IMesh
    {
        // Содержимое данного интерфейса должны быть тщательно обдумано самими конечно элементниками. 
        // Ибо именно его мы и будем использовать при создании базиса, который всё будет считать значения в точках и тп.
        // Прошу также учитывать, что согласно философии данного интерфейса, он должен работать исключительно с ГЕОМЕТРИЕЙ области
        // Пока вижу необходимость только в следующих методах

        /// <summary>
        /// Вернуть номер конечного элемента
        /// </summary>
        /// <param name="point">Точка</param>
        /// <returns>Номер КЭ которому принадлежит точка</returns>
        int GetOwnerFiniteElementNumber(Point point);

        /// <summary>
        /// Вернуть список точек конечного элемента. 
        /// </summary>
        /// <param name="elementNumber">номер конечного элемента</param>
        /// <returns>Список точек, которыми описывается КЭ в порядке локальной нумерации</returns>
        List<Point> GetFiniteElementPoints(int elementNumber);

        // Предыдущие 2 метода понадобятся вам для вычислений значений в точках в IBasis. 
        // Возможно придётся дополнить каким то методами, которые
        // будут помогать фабрике базисов считывать решение и проверять его на правильность, типа 
        // int PointsCount { get; } (количество точек)
    }
}
